\begin{tikzpicture}

	\definecolor{appcolor}       {rgb}{1,1,0.7}
	\definecolor{mixercolor} {rgb}{0.9,0.5,0.4}

	\tikzstyle{treenode} = [component, path fading=flow fade, align=center,
	                        rounded corners=1, minimum width=10ex]

	\tikzstyle{mixernode} = [treenode, bottom color=mixercolor]
	\tikzstyle{appnode}   = [treenode, bottom color=appcolor]

	%
	% Components
	%

	% mixer agent
	\node[treenode] (mixeragent) {Mixer Agent\\(Qt5)};

	% report ROM
	\node[treenode, below=10ex of mixeragent, xshift=-14ex] (reportrom) {Report-ROM};

	% config fs
	\node[treenode, below=5.5ex of mixeragent, xshift=11ex] (configfs) {Config FS};

	% mixer
	\node[mixernode, below=10ex of reportrom, xshift=14ex] (mixer) {Mixer};

	% fsrom
	\node[treenode, below=6ex of configfs] (fsrom) {FS ROM};


	%
	% Session relationships
	%

	\tikzstyle{treesessionarrow} = [arrow, thick, densely dashed, sloped=false,
	                                align=center]

	% mixer agent -> config fs
	\path[treesessionarrow] (mixeragent.300) --
		node[pos=0.7] {\emph{File system}} (configfs);

	% mixer agent -> report ROM
	\path[treesessionarrow] (mixeragent.240) --
		node[pos=0.6] {\emph{ROM}\\\emph{"channels"}} (reportrom);

	% mixer -> report ROM
	\path[treesessionarrow] (mixer) --
		node[pos=0.3, xshift=-1ex] {\emph{Report}\\\emph{"channels"}} (reportrom);

	% mixer -> FS ROM
	\path[treesessionarrow] (mixer) --
		node[pos=0.2] {\emph{ROM}\\\emph{"config"}} (fsrom);

	% fsrom -> config fs
	\path[treesessionarrow] (fsrom) --
		node[pos=0.3] {\emph{File system}} (configfs);

	%
	% Information flows
	%

	\tikzstyle{datamodel} = [fill=white, dropshadow, align=center,
	                         chamfered rectangle, draw, draw opacity=0.5,
	                         chamfered rectangle corners=north east,
	                         inner sep=0]

	\tikzstyle{informationflow} = [opacity=0.4,
	                         decoration={markings,
	                         mark=between positions 0.03 and 1 step 1ex with {\arrow{latex}}},
	                         postaction={decorate}]

	%
	% Channels report generated by the mixer
	%
	\path (reportrom.west)+(-3ex,0) coordinate (leftofreportrom);

	\path[informationflow] (mixer)
		.. controls +(-8ex,0ex) and +(0ex,-8ex) .. (leftofreportrom)
		.. controls +(0ex, 8ex) and +(-8ex,0ex) ..
		node[pos=0.3] (channels) {} (mixeragent.180);

	\path (channels) node[datamodel, xshift=0ex] {
		\tiny
		\begin{lstlisting}
Channels
		\end{lstlisting}
	};

	\path (configfs.east)+(5ex,-3.5ex) coordinate (rightofconfigfs);

	\path[informationflow] (mixeragent)
		.. controls +(8ex,0ex) and +(0ex,8ex) .. (rightofconfigfs)
		.. controls +(0ex,-8ex) and +(8ex,0ex) ..
		node[pos=0.5] (mixerconfig) {}
		(mixer);

	\path (mixerconfig) node[datamodel, xshift=0ex] {
		\tiny
		\begin{lstlisting}
Config
		\end{lstlisting}
	};

\end{tikzpicture}
